iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
Python

一起來用 Snakify 練練手系列 第 22

【一起來用 Snakify 練練手】Day22 Lesson 9 練習題參考解答-2

  • 分享至 

  • xImage
  •  

Side diagonal

n = int(input())
a = [[0] * n for i in range(n)]
for i in range(n):
    a[i][n - i - 1] = 1
for i in range(n):
    for j in range(n - i, n):
        a[i][j] = 2
for row in a:
    for elem in row:
        print(elem, end=' ')
    print()

這段程式的目的是根據給定的整數 n,生成一個大小為 n x n 的二維陣列,並按照以下規則填充陣列元素:

  1. 次對角線(右上到左下對角線)上的位置填入 1
  2. 次對角線上方的元素填入 0
  3. 次對角線下方的元素填入 2
    最後,程式會將這個陣列以 n x n 的形式列印出來,每個元素之間以空格分隔。

說明:

  1. n = int(input()):從使用者輸入讀取一個整數 n,表示二維陣列的大小為 n x n

  2. a = [[0] * n for i in range(n)]:初始化一個大小為 n x n 的二維陣列,所有位置的初始值為 0

  3. for i in range(n): a[i][n - i - 1] = 1:這個迴圈將次對角線(從右上到左下)的元素設置為 1

  4. for i in range(n): for j in range(n - i, n): a[i][j] = 2:這段程式碼遍歷次對角線下方的所有位置,將它們設置為 2

  5. for row in a: for elem in row: print(elem, end=' '):逐行列印二維陣列,每行中的元素以空格分隔。

Swap the columns

def swap_columns(a, i, j):
    for k in range(len(a)):
        a[k][i], a[k][j] = a[k][j], a[k][i]

n, m = [int(i) for i in input().split()]
a = [[int(j) for j in input().split()] for i in range(n)]
i, j = [int(i) for i in input().split()]
swap_columns(a, i, j)
print('\n'.join([' '.join([str(i) for i in row]) for row in a]))

這段程式的目的是交換一個 m x n 矩陣的兩列,並輸出交換後的結果。具體步驟如下:

說明:

  1. 函數 swap_columns(a, i, j)

    • 這個函數接受三個參數:a 是要進行列交換的二維矩陣,ij 是要交換的兩個列的索引。
    • 它使用一個迴圈遍歷矩陣的每一行,並將第 i 列和第 j 列的元素進行交換。
  2. 輸入部分

    • n, m = [int(i) for i in input().split()]:這行程式碼從使用者輸入中讀取矩陣的行數 n 和列數 m
    • a = [[int(j) for j in input().split()] for i in range(n)]:這行程式碼讀取 n 行,每行 m 個整數,生成一個 n x m 的二維矩陣 a
    • i, j = [int(i) for i in input().split()]:這行程式碼讀取要交換的兩列的索引 ij
  3. 列交換操作

    • 調用 swap_columns(a, i, j) 來執行列交換操作,通過迴圈交換矩陣中每一行的第 i 列和第 j 列元素。
  4. 輸出部分

    • print('\n'.join([' '.join([str(i) for i in row]) for row in a])):這行程式碼格式化輸出矩陣,將每行的元素轉換成字串並以空格分隔,然後每行元素換行打印。

Scale a matrix

def swap_columns(a, i, j):
    for k in range(len(a)):
        a[k][i], a[k][j] = a[k][j], a[k][i]

n, m = [int(i) for i in input().split()]
a = [[int(j) for j in input().split()] for i in range(n)]
i, j = [int(i) for i in input().split()]
swap_columns(a, i, j)
print('\n'.join([' '.join([str(i) for i in row]) for row in a]))

這段程式的目的是根據輸入的 m x n 矩陣 A 和一個整數 c,將矩陣中的每一個元素乘以 c,並輸出結果。

說明:

  1. 輸入部分

    • m, n = [int(k) for k in input().split()]:從使用者輸入讀取兩個正整數 mn,分別表示矩陣的行數和列數。
    • A = [[int(k) for k in input().split()] for i in range(m)]:讀取 m 行,每行包含 n 個整數,生成一個 m x n 的矩陣 A
    • c = int(input()):讀取一個整數 c,表示要將矩陣中的每一個元素乘以的數。
  2. 矩陣縮放操作

    • for i in range(m): for j in range(n): A[i][j] *= c:這個雙重迴圈遍歷矩陣的每一行和每一列,並將每個元素乘以 c
  3. 輸出部分

    • print('\n'.join([' '.join([str(k) for k in row]) for row in A])):這行程式碼將每一行的元素轉換成字串並以空格分隔,然後列印出矩陣,每行元素之間換行。

Multiply two matrices

m, n, r = [int(k) for k in input().split()]
A = [[int(k) for k in input().split()] for i in range(m)]
B = [[int(k) for k in input().split()] for j in range(n)]
C = [[0]*r for i in range(m)]

for i in range(m):
    for k in range(r):
        for j in range(n):
            C[i][k] += A[i][j] * B[j][k]

print('\n'.join([' '.join([str(k) for k in row]) for row in C]))

這段程式的目的是計算兩個矩陣的乘積。給定矩陣 A(大小為 m x n)和矩陣 B(大小為 n x r),它們的乘積矩陣 C 的大小為 m x r,其中每個元素由矩陣 A 的行和矩陣 B 的列的元素乘積之和計算得出。

說明:

  1. 輸入部分

    • m, n, r = [int(k) for k in input().split()]:從使用者輸入讀取三個正整數,分別表示矩陣 A 的行數 m 和列數 n,以及矩陣 B 的列數 r
    • A = [[int(k) for k in input().split()] for i in range(m)]:讀取 m 行,每行包含 n 個整數,生成 m x n 矩陣 A
    • B = [[int(k) for k in input().split()] for j in range(n)]:讀取 n 行,每行包含 r 個整數,生成 n x r 矩陣 B
    • C = [[0] * r for i in range(m)]:初始化一個大小為 m x r 的零矩陣 C,用於存儲最終的乘積結果。
  2. 矩陣乘法操作

    • 使用三重迴圈來計算矩陣乘積:
      • 外層迴圈遍歷結果矩陣 C 的行數 m
      • 中層迴圈遍歷結果矩陣 C 的列數 r
      • 內層迴圈遍歷矩陣 A 的列數 n,並計算每個元素的乘積之和:C[i][k] += A[i][j] * B[j][k]
  3. 輸出部分

    • print('\n'.join([' '.join([str(k) for k in row]) for row in C])):這行程式碼將矩陣 C 中的每行元素轉換成字串,並以空格分隔,最後按行輸出。

台灣首發晶片設計教材再兩天要募資啦
趕快點擊去了解 👉 https://wlinny.com


上一篇
【一起來用 Snakify 練練手】Day21 Lesson 9 練習題參考解答-1
下一篇
【一起來用 Snakify 練練手】Day23 Lesson 10 概念
系列文
一起來用 Snakify 練練手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言